package com.teamwork_backend.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.teamwork_backend.entity.ResumeEvaluate;
import com.teamwork_backend.service.ResumeEvaluateService;
import com.teamwork_backend.utils.DataResult;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author windy
 * @since 2021-04-25
 */
@RestController
@RequestMapping("/resume-evaluate")
@Api(value = "ResumeEvaluateController", tags = {"简历评估接口"})
public class ResumeEvaluateController {
    @Autowired
    private ResumeEvaluateService resumeEvaluateService;

    /** 简历评估查找列表 */
    @GetMapping("getlist") // Get方法
    @ApiOperation(value = "简历评估查找列表", notes = "简历评估查找列表", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userid", value = "专家唯一标示", required = true, dataType = "string")})
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult getlist(String userid) {
        // 定义查询字段
        // wrapper用法见https://blog.csdn.net/m0_37034294/article/details/82917234
        QueryWrapper<ResumeEvaluate> wrapper = new QueryWrapper<>();
        wrapper.select().eq("userid", userid);
        // 会自动生成 SELECT * FROM user_info WHERE userid = userid
        // 定义数据接收对象
        List<ResumeEvaluate> resumeEvaluate = resumeEvaluateService.list(wrapper);
        // 如果是列表 List<UserInfo> userInfos = userInfoService.list(wrapper);
        // 判断是否存在该用户信息
        if(resumeEvaluate != null) {
            // 成功返回数据
            return DataResult.finished().data("data", resumeEvaluate).message("用户信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("用户信息不存在！");
        }
    }

    /** 通过简历ID查找评估列表列表 */
    @GetMapping("getlistbyresumeid") // Get方法
    @ApiOperation(value = "简历评估查找列表", notes = "简历评估查找列表", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "resumeid", value = "用户简历唯一标示", required = true, dataType = "string")})
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult getlistbyresumeid(String resumeid) {
        // 定义查询字段
        // wrapper用法见https://blog.csdn.net/m0_37034294/article/details/82917234
        QueryWrapper<ResumeEvaluate> wrapper = new QueryWrapper<>();
        wrapper.select().eq("resumeid", resumeid);
        // 会自动生成 SELECT * FROM user_info WHERE userid = userid
        // 定义数据接收对象
        List<ResumeEvaluate> resumeEvaluate = resumeEvaluateService.list(wrapper);
        // 如果是列表 List<UserInfo> userInfos = userInfoService.list(wrapper);
        // 判断是否存在该用户信息
        if(resumeEvaluate != null) {
            // 成功返回数据
            return DataResult.finished().data("data", resumeEvaluate).message("用户信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("用户信息不存在！");
        }
    }

    @PostMapping("save") // Post方法
    @ApiOperation(value = "新增简历评估", notes = "新增简历评估", httpMethod = "POST")
    public DataResult save(
            @ApiParam(name = "ResumeEvaluate", value = "评估简历表对象", required = true)
            @RequestBody ResumeEvaluate resumeEvaluate)
    {
        // 设置添加成功的返回标志
        boolean flag = resumeEvaluateService.save(resumeEvaluate);
        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("提交评估简历成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("提交评估简历失败！");
        }
    }

    @PostMapping("update") // Post方法
    @ApiOperation(value = "更新简历评估（可只更新状态）", notes = "更新简历评估", httpMethod = "POST")
    public DataResult update(
            @ApiParam(name = "ResumeEvaluate", value = "评估简历表对象", required = true)
            @RequestBody ResumeEvaluate resumeEvaluate)
    {
        //防止前端传的空字符串把后台数据复写，所以置为null
        //因为mybatis-plus默认更新策略是NOT_NULL：非 NULL；即通过接口更新数据时数据为NULL值时将不更新进数据库。
        resumeEvaluate.setPositionid(null);
        resumeEvaluate.setResumeid(null);
        resumeEvaluate.setUserid(null);

        // 设置添加成功的返回标志
        boolean flag = resumeEvaluateService.updateById(resumeEvaluate);
        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("更新评估简历状态成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("更新评估简历状态失败！");
        }
    }
}

